Плохо! Плохо!:  0
Показано с 1 по 5 из 5

Тема: [DKR] DKR_DialogueHelper

  1. #1
    Бывалый Аватар для Darchan Kaen
    Информация о пользователе
    Регистрация
    17.06.2013
    Адрес
    Одесса
    Сообщений
    851
    Записей в дневнике
    3
    Репутация: 47 Добавить или отнять репутацию

    По умолчанию [DKR] DKR_DialogueHelper

    Название плагина: DKR_DialogueHelper

    Авторы: DarchanKaen

    Версия: 1.0.0 для MZ

    Дата выхода:
    1.0.0 - 29.06.2022

    Описание плагина:
    Плагин позволяет упростить построение диалогов, а именно - автоматизировать ввод имени и лица говорящего, а также цвета имени и текста.

    Использование плагина:
    У плагина нет параметров.

    В Примечании персонажа (указывать можно оба тега, или один из них):
    <dialogueHelperNameColorId: X>
    <dialogueHelperTextColorId: Y>
    где:::
    X, Y- номер цвета, как в чартеге \C[номер] (от 0 до 31).

    Команды (в эвенте, в команде "Скрипт"):
    DKR.DialogueHelper.setupMessage(N); - применение плагина; Сообщение, идущего после данного вызова Скрипта, будет применять настройки указанного персонажа.
    где:::
    N - номер персонажа из перечня Персонажей, чьи настройки (имя, лицо, цвета имени и текста) хотите использовать.

    Нюансы:
    0. Указываемый персонаж должен быть в перечне Персонажей! Наличие персонажа в партии, при этом, не обязательно.
    1. При использовании игнорирует лицо и имя, указанные вручную в Сообщении.
    2. Если в тексте Сообщения есть чаркод цвета, то он учитывается. Но если после него следует второй - текст выводится именно данным текстом,
    а не тем, что в Примечании персонажа.
    3. Все чаркоды поддерживаются - вывод переменных, иконок, ожидание, итд.
    4. Плагин сам за собой "подчищает" и никаких команд для нормализации следующих Сообщений вызывать не нужно - просто не вызывайте данный плагин Скриптом.
    5. Вопрос совместимости, смотри раздел "Совместимость" в самом конце.

    Пример использования:
    1) Сначала:
    В Примечании персонажа под номером 10:
    <dialogueHelperNameColorId: 13>
    <dialogueHelperTextColorId: 23>
    2) В игре:
    DKR.DialogueHelper.setupMessage(10); - в следующем Сообщении имя и фейс будут подставлены от указанного персонажа, под номером 10 в перечне Персонажей, цвет имени будет 13-й, цвет текста - 23-й.

    Как это выглядит:
    Спойлер картинки:







    Код:
    Спойлер Версия 1.0.0:

    Код:
    var Imported = Imported || {};
    Imported.DKR_DialogueHelper = true;
    
    var DKR = DKR || {};          
    DKR.DialogueHelper = DKR.DialogueHelper || {}; 
    DKR.DialogueHelper.version = 1.0;
    
    //-----------------------------------------------------------------------------
    /*:
     * @plugindesc (v.1.0.0) Плагин позволяет упростить построение диалогов, а именно - автоматизировать ввод имени и лица говорящего, а также цвета текста.
     * 
     * @target MZ
     * @author DarchanKaen
     *
     * @help
     *   DKR DialogueHelper
     * ----------------------------------------------------------------------------
     * ---Общая информация:
     * Плагин позволяет упростить построение диалогов, 
     * а именно - автоматизировать ввод имени и лица говорящего, а также цвета имени и текста.
     * Указанный персонаж (Actor) должен быть в перечек Персонажей!
     * ---Параметры плагина:
     * Отсутствуют.
     * --В Примечании персонажа (указывать можно оба тега, или один из них):
     *  <dialogueHelperNameColorId: X>
     *  <dialogueHelperTextColorId: Y>
     *  где:::
     * X, Y - номер цвета, как в чартеге \C[номер] (от 0 до 31).
     * ---Команды(в эвенте команда "Скрипт"):
     * DKR.DialogueHelper.setupMessage(N); - применение плагина; 
     * Сообщение, идущего после данного вызова Скрипта, будет применять настройки указанного персонажа.
     *  где:::
     * N - номер персонажа из перечня Персонажей, чьи настройки 
     * (имя, лицо, цвета имени и текста) нужно использовать.
     * 
     */
     
    (() => {
    
    //--DATA
    	let isMessageSetup = false;
    
    	let messageActor = null;
    	let nameTextColorId = null;
    	let messageTextColorId = null;
    	let messageFaceImageSettings = null;	
    	let messageSpeakerName = null;
    	let messageText = null;
    		
    	
    	
    //--CHANGED CORE
    	Game_Interpreter.prototype.command101 = function(params) {
    		if ($gameMessage.isBusy()) {
    			return false;
    		}
    		if(false === isMessageSetup){
    			$gameMessage.setFaceImage(params[0], params[1]);
    			$gameMessage.setBackground(params[2]);
    			$gameMessage.setPositionType(params[3]);
    			$gameMessage.setSpeakerName(params[4]);
    		}else{
    			let paintedName = paintSomeText(messageSpeakerName, nameTextColorId);
    			
    			$gameMessage.setFaceImage(messageFaceImageSettings[0], messageFaceImageSettings[1]);
    			$gameMessage.setBackground(params[2]);
    			$gameMessage.setPositionType(params[3]);
    			$gameMessage.setSpeakerName(paintedName);
    		}
    		
    		while (this.nextEventCode() === 401) {
    			// Text data
    			this._index++;
    			if(false === isMessageSetup){
    				$gameMessage.add(this.currentCommand().parameters[0]);
    			}else{
    				let paintedMessageText = paintSomeText(this.currentCommand().parameters[0], messageTextColorId);
    				$gameMessage.add(paintedMessageText);
    			}
    		}
    		switch (this.nextEventCode()) {
    			case 102: // Show Choices
    				this._index++;
    				this.setupChoices(this.currentCommand().parameters);
    				break;
    			case 103: // Input Number
    				this._index++;
    				this.setupNumInput(this.currentCommand().parameters);
    				break;
    			case 104: // Select Item
    				this._index++;
    				this.setupItemChoice(this.currentCommand().parameters);
    				break;
    		}
    		this.setWaitMode("message");
    		
    		clearMessageSettings();
    		
    		return true;
    	};
    		
    		
    		
    //--LOGIC	
    	const setUpMessageSettings = (actorId) => {
    		messageActor = $gameActors._data[actorId];
    		if(undefined === messageActor){
    			messageActor = new Game_Actor(actorId);
    		}
    		let actorMetadata = getActorMetadata(actorId);
    		
    		let messageSpeakerFaceName = messageActor._faceName;
    		let messageSpeakerFaceIndex = messageActor._faceIndex;
    		let nameAndTextColorInd = getActorNameAndTextColorsId(actorMetadata);
    		
    		nameTextColorId = nameAndTextColorInd[0];
    		messageTextColorId = nameAndTextColorInd[1];
    		messageSpeakerName = messageActor._name;
    		messageFaceImageSettings = [messageSpeakerFaceName, messageSpeakerFaceIndex];
    		
    		isMessageSetup = true;
    	}
    
    	const getActorNameAndTextColorsId = (actorMetadata) => {
    		let nameColorId = null;
    		let textColorId = null;
    		nameColorId = Number(actorMetadata.dialogueHelperNameColorId) || null;
    		textColorId = Number(actorMetadata.dialogueHelperTextColorId) || null;
    		
    		return [nameColorId, textColorId];
    	}
    		
    		
    	const getActorMetadata = (actorId) => {
    		let actorMetadata = null;
    		let actorData = $dataActors[actorId];
    		actorMetadata = actorData.meta;
    			
    		return actorMetadata;
    	}	
    		
    	const paintSomeText = (someText, colorCodeToPaint) => {
    		let paintedText = null;
    		if(null === colorCodeToPaint || colorCodeToPaint < 0 || colorCodeToPaint > 31){
    			paintedText = someText;
    		}else{
    			paintedText = `\\C[${colorCodeToPaint}]${someText}\\C[0]`;
    		}
    		
    		return paintedText;
    	}	
    		
    		
    	const clearMessageSettings = () => {
    		isMessageSetup = false;
    		
    		messageActor = null;
    		nameTextColorId = null;
    		messageTextColorId = null;
    		messageFaceImageSettings = null;	
    		messageSpeakerName = null;
    		messageText = null;
    	}
    
    
    
    //--COMMANDS	
    	DKR.DialogueHelper.setupMessage = function(actorId){
    		setUpMessageSettings(actorId);
    	}
    	
    })();


    Загрузка:
    Спойлер Версия 1.0.0:


    Условия поставки плагина:
    Поставляется AS-IS.
    Вся ответственность при использовании - на Пользователе!
    !

    Совместимость:
    Плагин меняет логику работы команды вывода Сообщения у Интерпретатора и может быть не совместим с другими плагинами, меняющими данную логику
    или логику отображения текста!
    Плагин корректно работает совместно с такими плагинами, как:
    1) GALV_MessageBustsMZ
    2) Theo_TypingSoundMZ
    Совместимость с другими плагинами не гарантируется.

    Спойлер Лирическое отступление:
    У меня очень давно была идея данного плагина для упрощения работы с текстом.
    Аналогов я не нашел - но скорее всего плохо искал.
    Очень странно, что такого функционала нет "из-коробки", действительно упрощает жизнь.

    Плагин может быть полезен при создании чего-то "классического"...


    P.S:
    Для MV, скорее всего, можно сделать нечто подобное. Если нужно - напишите.
    Вопрос совместимости там будет, конечно, стоять острее.
    Последний раз редактировалось Darchan Kaen; 30.06.2022 в 12:17. Причина: Добавлены раздел "Как это выглядит" с картинками

  2. #2
    Бывалый Аватар для Darchan Kaen
    Информация о пользователе
    Регистрация
    17.06.2013
    Адрес
    Одесса
    Сообщений
    851
    Записей в дневнике
    3
    Репутация: 47 Добавить или отнять репутацию

    По умолчанию

    Эх, криво скопипастил название темы.
    Плагин для MZ.

  3. #3
    Создатель Аватар для Рольф
    Информация о пользователе
    Регистрация
    14.04.2008
    Адрес
    Южно- Сахалинск/Пенза
    Сообщений
    10,146
    Записей в дневнике
    2
    Репутация: 108 Добавить или отнять репутацию

    По умолчанию

    Я конечно понимаю, что делает плагин, но не хватает картинок. Почему вы банально с редактора не можете добавить, как в пример? Есть что показать.

  4. #4
    Бывалый Аватар для Darchan Kaen
    Информация о пользователе
    Регистрация
    17.06.2013
    Адрес
    Одесса
    Сообщений
    851
    Записей в дневнике
    3
    Репутация: 47 Добавить или отнять репутацию

    По умолчанию

    Цитата Сообщение от Рольф Посмотреть сообщение
    Я конечно понимаю, что делает плагин, но не хватает картинок. Почему вы банально с редактора не можете добавить, как в пример? Есть что показать.
    Добавил картинки под спойлером в "Как это выглядит".

  5. #5
    Местный Аватар для id0
    Информация о пользователе
    Регистрация
    22.05.2013
    Адрес
    Москва
    Сообщений
    113
    Записей в дневнике
    4
    Репутация: 6 Добавить или отнять репутацию

    По умолчанию

    Цитата Сообщение от Darchan Kaen

    Спойлер Лирическое отступление:
    У меня очень давно была идея данного плагина для упрощения работы с текстом.
    Аналогов я не нашел - но скорее всего плохо искал.
    Очень странно, что такого функционала нет "из-коробки", действительно упрощает жизнь.

    Плагин может быть полезен при создании чего-то "классического"...


    P.S:
    Для MV, скорее всего, можно сделать нечто подобное. Если нужно - напишите.
    Вопрос совместимости там будет, конечно, стоять острее.
    Для MV есть Izy's Fast Face, я его юзаю. Там команда плагина, правда, но больше нигде ничего писать не надо, только указать какого актёра брать. Про имена не помню, я ими не пользуюсь в диалогах. У меня фишка во второй главе, что борода растёт, как у ведьмака, если б не этот плагин, я бы вообще не смог это сделать.
    Спойлер Мои игры на RpgMaker:

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
[DKR] DKR_DialogueHelper